<?php

 
class pFiles_File extends cFormElement
{
	
	function getEditText($fieldName, $id, $value, cView $view)
	{
		$url = $this->cms->file->getRelative($this->cms->url, $this->cms->siteDir.$value);
		$class = $this->tagName." ".$this->getAttr("class");
		$s='<fieldset class="file" \">
				<legend>
					<label for="'.$id.'" />'.$this->getAttr('label').'</label>
				</legend>
				<span class="link"><a href="'.$url.'">'.$value.'</a></span>
				<input type="file" id="'.$id.'" class="'.$class.'" name="'.$fieldName.'" />
				<input type="checkbox" name="'.$fieldName.'_delete" id="'.$id.'_delete" /><label for="'.$id.'_delete">smazat</label>
			</fieldset>';
		return $s;
	}
	

	function setElement(SimpleXMLElement $parent, $value, cView $view)
	{
		if ($view->doctype=="raw") 
		{
			if (($path = $this->upload($view, $this->tagName, $value))!='') {
				$parent->addChild($this->tagName, $path);
			}

		} else if ($view->action=="show") {
			
			$elm = $parent->addChild($this->tagName);
			
			//	nastavíme relativní url adrese dané stránky na webu, kterou právě prohlížíme
			$elm->addChild("url",$this->cms->file->getRelative($this->cms->url, $this->cms->siteDir.$value));
			$elm->addChild("name",substr(strrchr($this->cms->siteDir.$value,"/"),1));
			
			/*	Typ souboru, vrací poslední příponu,
			 *  pokud je složkou vrátí _directory 
			 */
			if (is_dir($this->cms->siteDir.$value)) {
				$type = "_directory";
			} else $type = substr(strchr($value,"."),1);
			
			$elm->addChild("type",$type);			
			
			//	Vygeneruje člověkem čitetelnou velikost souboru s přesností na dvě desetinná čísla
			$units = array("B","KB","MB","GB","TB");
			$uPos = 0;
			if (is_file($file = $this->cms->siteDir.$value)) {
				$size = filesize($file);
			}
			
			while ($size > 1024) {
				$size = $size/1024;
				$uPos++;
			}
			$size =round($size*100)/100 . $units[$uPos];
			$elm->addChild("size",$size);
			
		} else {
			return parent::setElement($parent, $value,$view);
		}
	}
	
	function upload($view, $name, $value) 
	{
		$path = $view->domPath->get();
		
		//	nastavení $file na soubor, který chceme
		$top = array_pop($path);		
		$file = $_FILES;
		foreach ($path as $node) {
			$file = $file[$node];
		}
		
		//	upload souboru
		if (is_file($uploaded = $file['tmp_name'][$top]) && $file['size'][$top]>0 ) 
		{
			try {
				//	zrušení starého filu
				if ($value!="") unlink($this->cms->siteDir.$value);
			
				//	příprava složky
				$dir = $this->cms->file->prepareFolder($rel = "webfiles/".$this->node->group."/".$this->node->type);
				$dest = $dir."/".$file['name'][$top];

				//	přesunutí do site diru
				move_uploaded_file($uploaded, $dest);
				
				/*	Do databáze se uloží relativní cesta ze site diru,
				 *	to proto, aby se poloha sitediru mohla změnit bez 
				 *	změny údajů v databázi.
				 */
				$value = $rel."/".$file['name'][$top];
			} catch (Exception $e) {
				throw $e;
			}
		}
		return $value;
	}
}
 
?>